import {ElMessage} from "element-plus";

export default {
    /**
     * 复用 - 添加数据
     * @param domain 添加的数据
     * @param api 添加的 api
     * @param loadFn 回调
     * @param title 标题
     */
    async addData(domain: any, api: any, loadFn: any, title: string,): Promise<boolean> {
        try{
            const {data} = await api().add(domain)
            // 提示
            ElMessage.success(data)
            // 刷新
            await loadFn()
            return Promise.resolve(true)
        }catch (e:any) {
            console.log('添加' + title + '异常捕获\n', e);
            ElMessage.error(e.message)
            return Promise.reject(false)
        }
    },

    /**
     * 复用 - 检查是否需要重置
     * @param list 数据
     */
    checkReset(list: any): void {
        if (list && list.length > 0) {
            list.splice(0, list.length)
            list.length = 0
        }
    },

    /**
     * 复用 - 检查是否需要加载/
     * @param lock 锁
     * @param list 数据
     */
    isLoad(lock: boolean, list: any): boolean {
        return (!lock) && ((!list) || list.length === 0)
    },

    /**
     * 复用修改显示和隐藏
     * @param ids 主键数组
     * @param type 类型
     * @param api 修改的api
     * @param loadFn 回调
     * @param title 标题
     * @return 承诺对象 - true or false
     */
    async batchVisible(ids: any, type: number, api: any, loadFn: any, title: string): Promise<boolean> {
        try{
            // 发起请求
            const params = type ? {type} : null
            const {data} = await api().batchVisible(ids ? ids.join(',') : "", params)
            ElMessage.success(data)
            await loadFn() // 刷新数据
            return Promise.resolve(true)
        }catch (e:any){
            console.log('修改' + title + '异常捕获\n', e);
            ElMessage.error(e.message)
            return Promise.reject(false)
        }
    },

    /**
     * 批量修改显示或隐藏
     * @param ids 需要显示 ID
     * @param params 父级 ID / 类型标识
     * @param api 修改的api
     * @param loadFn 回调
     * @param title 标题
     * @return 承诺对象 - true or false
     */
    async doBatchVisible(ids: any, params: string, api: any, loadFn: any, title: string): Promise<boolean> {
        try{
            // 发起请求
            const {data} = await api().batchVisible((ids ? ids.join(',') : ""), params)
            ElMessage.success(data)
            await loadFn() // 刷新数据
            return Promise.resolve(true)
        }catch (e:any){
            console.log('修改' + title + '异常捕获\n', e);
            ElMessage.error(e.message)
            return Promise.reject(false)
        }
    },
}